From 56a7a7851b09cb30a5cd543c8cb4f926109b4290 Mon Sep 17 00:00:00 2001
From: Fuwn <contact@fuwn.net>
Date: Sun, 24 May 2026 13:22:34 +0000
Subject: refactor(locale): move hardcoded UI strings into english locale

Adds optional namespaces (common, errors, commandPalette, headTitle,
notifications, schedule, events, home, reader, routes, badgePreview,
badgeWall) and extends existing ones (settings.*, lists.*, tools.*,
user.*, hololive.*) on the Locale interface. New fields are optional
so japanese.ts can omit them; svelte-i18n's fallbackLocale handles
the runtime miss.

HeadTitle gains an optional routeKey prop for type-safe lookup.
defaultActions becomes a factory so the command palette re-reads
locale on language toggle. The existing JP feedback translation
in routes/settings is preserved via japanese.ts.

Out of scope (kept hardcoded): service-worker.ts, app.html,
Landing*.svelte, tools.ts registry, Easter Event 2025 pages.
---
 src/routes/hololive/[[stream]]/+page.svelte | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

(limited to 'src/routes/hololive/[[stream]]/+page.svelte')

diff --git a/src/routes/hololive/[[stream]]/+page.svelte b/src/routes/hololive/[[stream]]/+page.svelte
index 573c16aa..250ce22a 100644
--- a/src/routes/hololive/[[stream]]/+page.svelte
+++ b/src/routes/hololive/[[stream]]/+page.svelte
@@ -49,16 +49,16 @@ const getPinnedStreams = () => {
 };
 </script>
 
-<HeadTitle route="hololive Schedule" path="/hololive" />
+<HeadTitle routeKey="hololiveSchedule" path="/hololive" />
 
 {#await schedulePromise}
-  <Message message="Loading schedule ..." />
+  <Message message={$locale().hololive.loadingSchedule} />
 
   <Skeleton grid={true} count={100} width="49%" height="16.25em" />
 {:then scheduleResponse}
   {#if scheduleResponse}
     {#await scheduleResponse.text()}
-      <Message message="Parsing schedule ..." />
+      <Message message={$locale().hololive.parsingSchedule} />
 
       <Skeleton grid={true} count={100} width="49%" height="16.25em" />
     {:then untypedSchedule}
@@ -68,17 +68,17 @@ const getPinnedStreams = () => {
     {:catch}
       <Message loader="ripple" slot>
         {$locale().hololive.parseError}
-        <a href={'#'} onclick={() => location.reload()}>Try again?</a>
+        <a href={'#'} onclick={() => location.reload()}>{$locale().hololive.tryAgainQuestion}</a>
       </Message>
     {/await}
   {:else}
-    <Message message="Loading schedule ..." />
+    <Message message={$locale().hololive.loadingSchedule} />
 
     <Skeleton grid={true} count={100} width="49%" height="16.25em" />
   {/if}
 {:catch}
   <Message loader="ripple" slot>
-    {$locale().hololive.loadError} Please
-    <a href={'#'} onclick={() => location.reload()}>try again</a> later.
+    {$locale().hololive.loadError} {$locale().hololive.pleasePrefix}
+    <a href={'#'} onclick={() => location.reload()}>{$locale().common?.tryAgain}</a> {$locale().hololive.laterSuffix}
   </Message>
 {/await}
-- 
cgit v1.2.3

